package cn.supermarket.system.mapper;

import cn.supermarket.common.entity.system.SysRole;
import cn.supermarket.common.entity.system.SysRoleDept;
import cn.supermarket.common.entity.system.SysUser;
import cn.supermarket.system.dto.AuthUserRoleDTO;
import cn.supermarket.system.dto.SysRoleDTO;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import java.util.List;

/**
 * @Entity cn.supermarket.common.entity.system.SysRole
 */
@Repository
public interface SysRoleMapper extends BaseMapper<SysRole> {
    /**
     * 根据用户ID查询角色权限
     *
     * @param userId 用户ID
     * @return 权限列表
     */
    List<SysRole> selectRolePermissionByUserId(Long userId);
    /**
     * 根据用户ID查询角色
     *
     * @param userName 用户名
     * @return 角色列表
     */
    List<SysRole> selectRolesByUserName(String userName);
    /**
     * 获取用户所有角色权限
     *
     * @param user
     * @return
     */
    List<Long> getRoleIdsByUser(SysUser user);
    /**
     * 根据条件分页查询角色数据
     *
     * @param sysRoleParam 角色信息
     * @return 角色数据集合信息
     */
    List<SysRole> selectRoleList(SysRoleDTO sysRoleParam);

    /**
     * 校验角色名称是否唯一
     *
     * @param roleName 角色名称
     * @return 角色信息
     */
    SysRole checkRoleNameUnique(String roleName);

    /**
     * 校验角色权限是否唯一
     *
     * @param roleKey 角色权限
     * @return 角色信息
     */
    SysRole checkRoleKeyUnique(String roleKey);

    /**
     * 新增角色菜单信息
     */
    int batchRoleMenu(@Param("roleId") Long roleId,@Param("menuId") Long menuId);
    /**
     * 通过角色ID查询角色使用数量
     *
     * @param roleId 角色ID
     * @return 结果
     */
    int countUserRoleByRoleId(Long roleId);
    /**
     * 批量删除角色菜单关联信息
     *
     * @param roleIds 需要删除的数据ID
     * @return 结果
     */
    void deleteRoleMenu(Long[] roleIds);
    /**
     * 批量删除角色部门关联信息
     *
     * @param roleIds 需要删除的数据ID
     * @return 结果
     */
    void deleteRoleDept(Long[] roleIds);
    /**
     * 通过角色ID删除角色和菜单关联
     *
     * @param roleId 角色ID
     * @return 结果
     */
    void deleteRoleMenuByRoleId(Long roleId);
    /**
     * 删除用户和角色关联信息
     *
     * @param authUserRoleParam 用户和角色关联信息
     * @return 结果
     */
    int deleteUserRoleInfo(AuthUserRoleDTO authUserRoleParam);

    /**
     * 批量新增用户角色信息
     *
     * @param list 用户角色列表
     * @return 结果
     */
    int batchUserRole(List<AuthUserRoleDTO> list);

    /**
     * 批量取消授权用户角色
     *
     * @param roleId 角色ID
     * @param userIds 需要删除的用户数据ID
     * @return 结果
     */
    public int deleteUserRoleInfos(@Param("roleId") Long roleId, @Param("userIds") Long[] userIds);
    /**
     * 通过角色ID删除角色和部门关联
     *
     * @param roleId 角色ID
     * @return 结果
     */
    void deleteRoleDeptByRoleId(Long roleId);

    int batchRoleDept(List<SysRoleDept> list);
}




